package main

import (
	"fmt"
	"regexp"
)

/*
问题
给定一个以二进制编码的数字，以字符串形式呈现。如果是偶数，做除2操作；奇数做减1操作。如此往复操作，直到最后变成0，统计操作的次数
例如28 :‘11100’
第1次操作 28/2=14 1110
第2次操作 14/2=7 111
第3次操作 7-1=6 110
第4次操作 6/2=3 11
第5次操作 3-1=2 10
第6次操作 2/2=1 1
第7次操作 1-1=0 0

第3种方法，直接对字符串种的1计数来解决

通过对题目二进制缩减规则观察，我们可以找到一个规律:

字符串长度大于2的情况下，对于末位是1的操作减少1位，其需要操作2次，譬如: 111(7)-> 110(6)->11(3)

对于末位是0的操作减少1位，其操作需要1次，譬如 110(6)->11(3)

对于最后一个1其变化位0截至操作，其操作次数为1

*/

func main() {
	s := "11100"
	fmt.Println(Solution(s))
}

//Solution improved solution
func Solution(s string) int {
	regexp.MustCompile(`^[0]+`).ReplaceAllString(s, "") //把前面的0替换成空格
	fmt.Println("s:", s)

	var cnt int
	for _, chr := range s {
		if chr == '1' {
			cnt++
		}
	}
	return len(s) + cnt - 1 //7
}
